package com.yl.chainStore.entity.pay

import com.baomidou.mybatisplus.annotation.IdType
import com.baomidou.mybatisplus.annotation.TableField
import com.baomidou.mybatisplus.annotation.TableId
import com.baomidou.mybatisplus.annotation.TableName
import com.yl.chainStore.common.Constants
import com.yl.chainStore.common.enums.TypeEnum
import com.yl.common.annotation.NoArg
import com.yl.common.getContext
import java.math.BigDecimal
import java.math.RoundingMode
import java.util.*

/**
 * <p>
 *
 * </p>
 *
 * @author cxw
 * @since 2021-11-09
 */
@NoArg
@TableName("pay_order_refund_log")
data class PayOrderRefundLog(

	/**
	 * 退款订单
	 */
	@TableId(value = "id", type = IdType.AUTO)
	var id: Long,

	/**
	 * 退款订单
	 */
	@TableField("order_id")
	var orderId: Long,

	/**
	 * 退款人
	 */
	@TableField("create_user_id")
	var createUserId: Long = getContext().userId,

	/**
	 * 退款时间
	 */
	@TableField("create_time")
	var createTime: Date = Date(),

	/**
	 * 退款总金额（记录一下）
	 */
	@TableField("refund_money")
	var refundMoney: Long,

	/**
	 * 退款分院
	 */
	@TableField("sub_company_id")
	var subCompanyId: Long = getContext().subCompanyId,

	/**
	 * 公司id
	 */
	@TableField("company_id")
	var companyId: Long = getContext().companyId,

	/**
	 * 退款类型（推成现金 还是余额）
	 * 1381-1410   退款方式
	 */
	@TableField("refund_type")
	var refundType:TypeEnum = TypeEnum.ORDER_REFUND_TYPE_TO_BALANCE,

	/**
	 * 退款方式（退款操作类型）
	 * 1451- 1500 订单退款类型（退款操作类型）
	 */
	@TableField("customer_order_refund_type")
	var customerOrderRefundType:TypeEnum = TypeEnum.CUSTOMER_ORDER_REFUND_TYPE_ITEM,

	@TableField("pay_num")
	var payNum:String ?= null,

	@TableField("remark")
	var remark:String ?= null,

	@TableField(exist = false)
	var details:MutableList<PayOrderDetailRefundLog>?= null

	){
	/**
	 * 退款金额显示
	 */
	@TableField(exist = false)
	var refundMoneyShow: BigDecimal? = null
		get() {

			if (field == null) {
				return BigDecimal(refundMoney.div(Constants.OtherConfig.MONEY_TO_DB_DOUBLE)).setScale(
					2,
					RoundingMode.HALF_UP
				)
			}
			return field
		}
		set(value) {
			if (value != null) {
				refundMoney = (value.multiply(BigDecimal(Constants.OtherConfig.MONEY_TO_DB_DOUBLE))).toLong()
				field = value
			}
		}
}
